package com.example.d7_method_references;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 目标：掌握特定类型的方法引用
 */
public class Test2 {
    public static void main(String[] args) {
        String[] names = {"boby", "angela", "Andy", "dlei", "caocao", "Babo", "jack", "Cici"};

        // 进行排序（默认是按照字符串首字母编号进行升序排序）
        // Arrays.sort(names);

        // 要求忽略字符串首字符大小写进行排序
//        Arrays.sort(names, new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                // 制定比较规则 o1 = "Andy"  o2 = "angela"
//                // compareToIgnoreCase()用于比较两个字符串o1和o2的大小,不区分大小写返回值为一个整数
//                // 若o1小于o2则返回负数,若o1等于o2则返回0,若o1大于o2则返回正数
//                return o1.compareToIgnoreCase(o2);
//            }
//        });

        // 使用Lambda表达式化简 这行代码就是上一行代码的意思
        // Arrays.sort(names, (o1, o2) -> o1.compareToIgnoreCase(o2));
        // 特定类型的方法引用
        /*
        如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数作为方法的主调,后面的所有参数都是作为该实例方法的入参时,则就可以使用特定类型的方法引用
        格式：类型::方法名
        */
        Arrays.sort(names, String::compareToIgnoreCase);
        System.out.println(Arrays.toString(names));
    }
}
